package com.py.credit.dao;

import com.py.credit.entity.AuthorizeRecord;
import com.py.framework.core.common.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author YaoS
 * @date 2019-05-13 15:18
 */
public interface AuthorizeRecordDao {

    /**
     * 功能描述: 新增授权信息
     *
     * @param record 第三方信息
     * @author YaoS
     * @date 19/5/13 15:30
     */
    void addRecord(AuthorizeRecord record);

    /**
     * 功能描述: 分页查询列表
     *
     * @param deptName 第三方名称
     * @param page     分页信息
     * @return 查询结果集
     * @author YaoS
     * @date 19/5/13 15:57
     */
    List<AuthorizeRecord> selectRecordListForPage(@Param(value = "deptName") String deptName,
                                                  @Param(value = "page") Page page);

    /**
     * 功能描述:查询所有机构信息
     *
     * @param modelId 授权id
     * @return 查询结果
     * @author YaoS
     * @date 19/5/13 14:59
     */
    List<AuthorizeRecord> selectAllRecordList(@Param("modelId") String modelId);

    /**
     * 功能描述: 根据id查询详情
     *
     * @param id id
     * @return AuthorizeRecord 详情
     * @author YaoS
     * @date 19/5/15 17:02
     */
    AuthorizeRecord selectRecordDetail(String id);

    /**
     * 功能描述: 根据token查询详情
     *
     * @param token token
     * @return AuthorizeRecord 详情
     * @author YaoS
     * @date 19/5/15 17:02
     */
    AuthorizeRecord selectRecord(String token);

    /**
     * 功能描述: 查询模型和机构绑定关系
     *
     * @param modelId 模型id
     * @param token   机构token
     * @return 查询结果
     * @author YaoS
     * @date 19/5/28 15:09
     */
    Integer selectModelRecordBind(@Param(value = "modelId") String modelId, @Param(value = "token") String token);

    /**
     * 功能描述:更新AuthorizeRecord信息
     *
     * @param record 第三方信息
     * @author YaoS
     * @date 19/5/13 15:59
     */
    void updateRecord(AuthorizeRecord record);

    /**
     * 功能描述: 根据id删除第三方信息
     *
     * @param recordId 第三方id
     * @author YaoS
     * @date 19/5/13 15:35
     */
    void deleteRecordById(@Param(value = "id") Integer recordId);
    /**
     * 功能描述: 根据token删除第三方信息
     *
     * @param recordId 第三方token
     * @author YaoS
     * @date 19/5/13 15:35
     */
    void deleteRecordByToken(@Param(value = "token") String token);

    /**
     * 功能描述:查询所有模型信息
     *
     * @param modelId 授权id
     * @return 查询结果
     * @author YaoS
     * @date 19/5/13 14:59
     */
    List<AuthorizeRecord> findModelBind(@Param("modelId") String modelId);

    /**
     * 功能描述: 根据id批量删除
     *
     * @param ids id list
     * @author YaoS
     * @date 19/5/15 16:50
     */
    void deleteRecordByIds(@Param(value = "ids") List<String> ids);

    /**
     * 功能描述: 查询已删除的部门的token
     *
     * @return List<String> 已删除的部门的token
     * @author YaoS
     * @date 19/5/27 14:50
     */
    List<String> selectNotExistDeptToken();

    /**
     * 删除关联信息
     *
     * @param ids 不存在的部门token
     * @author YaoS
     * @date 19/5/27 14:49
     */
    void deleteAssociation(@Param(value = "ids") List<String> ids);
}
